<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        // 作用域
		// 作用:起作用
		// 域:范围
		// 起作用的范围
		
		// 变量起作用的范围就是变量的作用域
		
		// 1.块级作用域
		// JavaScript 中没有块级作用域
		
		// 如果有块级作用域下面的代码的显示结果为 undefined undefined
		
		// es6中的写法
		// Class Animal {
		// 	constructor (type) {
		// 		for (var i = 0; i < 10; i++) {
		// 			var num = i;
		// 		}
		// 		this.type = type;
		// 	}
		// 	
		// }
		// let person = new Animal(type);
		
		// console.log(i);
		// console.log(num);
		
		// 2.词法作用域
		// 就是在代码写好的那一刻,变量的作用域就已经确定了,这种作用域就是词法作用域
		// 和词法作用域相对的叫动态作用域,js中是词法作用域不是动态作用域
		
		function f2() {
			var a = 456;
			function f1() {
				console.log(a);
			}
		}
		
		
		f2();
		
		// 3.在JavaScript es5之前唯一能产生作用域的东西是函数 !
		
		var a = 1;
		function test () {
			var b = 10;
		}
				
		// 4.词法作用域的规则
		// 函数允许访问函数外的数据
		// 整个代码结构中只有函数可以限定作用域
		// 作用域规则首先使用提升规则分析
		// 如果当前作用域中有了该变量,就不考虑外面的同名变量
		
    </script>
</head>
<body>

</body>
</html>